package com.cw.DesignModel23.Ceational.SingletonPattern.s5;

/**
 * 懒汉式(线程安全，同步代码块)
 */
public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class){
                instance = new Singleton();
            }
        }
        return instance;
    }

    /**
     * 【分析】
     *
     * 这种方式，本意是想对第四种实现方式的改进，因为前面同步方法效率太低改为同步产生实例化的的代码块
     * 但是这种同步并不能起到线程同步的作用。跟第3种实现方式遇到的情形一致，假如一个线程进入了if(singleton == nul)判断语句块，还未来得及往下执行另一个线程也通过了这个判断语句，这时便会产生多个实例
     * 结论：在实际开发中，不能使用这种方式
     * ————————————————
     * 版权声明：本文为CSDN博主「Hello Dam」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
     * 原文链接：https://blog.csdn.net/laodanqiu/article/details/131670600
     */
}
